package br.com.abenildo.modelo;

import java.util.ArrayList;

import br.com.abenildo.controle.Biblioteca;
import br.com.abenildo.exception.BibliotecaNaoEncontradoException;
import br.com.abenildo.exception.RepositorioException;


public class RepositorioBibliotecaArray implements IRepositorioBilblioteca {
	
	private Biblioteca[] bibliotecas;
	private int indice;
	
	public static final int Default = 100;
	
	public RepositorioBibliotecaArray(){
		bibliotecas = new Biblioteca[Default];
		indice = 0;
	}
	
	 RepositorioBibliotecaArray(Biblioteca[] biblioteca,int indice){
		this.bibliotecas = biblioteca;
		this.indice = indice;
	}
	 
	  public void inserirBiblioteca (Biblioteca biblioteca) throws RepositorioException {
		 bibliotecas[indice] = biblioteca;
		 indice = indice + 1; 
	 }
	 
	   public void removerBiblioteca (String cnpj) throws BibliotecaNaoEncontradoException{
		  int i = getIndice(cnpj);
		  bibliotecas[i] = bibliotecas[indice - 1];
		  indice = indice - 1;
		  bibliotecas[indice] = null;
	  }
	  
	    public Biblioteca procurarBiblioteca(String cnpj) throws BibliotecaNaoEncontradoException{
		   int i = getIndice(cnpj);
		   return bibliotecas[i];
	   }
	   
	    public void atualizarBiblioteca(Biblioteca biblioteca)throws BibliotecaNaoEncontradoException{
		   int i = getIndice(biblioteca.getCnpj());
		   System.out.print(i);
		   bibliotecas[i] = biblioteca;
	   }
	   
	    public boolean Existe (String cnpj) {
	    	boolean resposta;
	    	
	    	try{
	    		getIndice(cnpj);
	    		resposta = true;
	 
	    	}
	    		catch(BibliotecaNaoEncontradoException ex){
	    			
	    			resposta = false;
	    		}
	    			return resposta;
	    		
	    		}
	    
	    	  private int getIndice(String cnpj) throws BibliotecaNaoEncontradoException {
	    		  int resposta = -1;
	    		  boolean achou = false;
	    		  
	    		  for(int i = 0; !achou && (i < indice); i = i + 1){
	    			  if(bibliotecas[i].getCnpj().equals(cnpj)){
	    				  resposta = i;
	    				  achou = true;
	    			  }
	    		  }
	    		  //SE FOR DIFERENTE DO QUE ACHOU LEVANTE UMA NOVA EXCESSAO
	    		  if(!achou) throw new BibliotecaNaoEncontradoException(cnpj); 
	    			  return resposta;
	    }
	    	  
	    	  public ArrayList<Biblioteca> listarBiblioteca(){
	    		  ArrayList<Biblioteca>lista = new ArrayList<Biblioteca>();
	    		  for(int z = 0; z <= this.indice; z++){
	    			  if(bibliotecas[z] != null)lista.add(bibliotecas[z]);
	    		  }
	    		   return lista;
	    	  }
	     

}
